#include "page_manager.h"
#include "Oled_i2c.h"
#include "font.h"

// 当前页面
static PageType currentPage = PAGE_LOADING;

// 进度条配置
static ProgressBar progressBar = {
    .progress = 0,
    .width = 100,    // 进度条宽度为100像素
    .x = 14,         // 居中显示
    .y = 4           // 在第4行显示
};

// 显示进度条
static void DisplayProgressBar(void)
{
    uint8_t progress_width = (progressBar.width * progressBar.progress) / 100;
    uint8_t i;

    // 绘制进度条外框
    OLED_SetPosition(progressBar.x, progressBar.y);
    for (i = 0; i < progressBar.width + 2; i++)
    {
        OLED_WriteData(0x80); // 上边框
    }

    OLED_SetPosition(progressBar.x, progressBar.y + 1);
    OLED_WriteData(0xFF); // 左边框
    for (i = 0; i < progress_width; i++)
    {
        OLED_WriteData(0xFF); // 已完成部分
    }
    for (i = progress_width; i < progressBar.width; i++)
    {
        OLED_WriteData(0x81); // 未完成部分
    }
    OLED_WriteData(0xFF); // 右边框

    OLED_SetPosition(progressBar.x, progressBar.y + 2);
    for (i = 0; i < progressBar.width + 2; i++)
    {
        OLED_WriteData(0x01); // 下边框
    }
}

// 显示开始页面
static void DisplayStartPage(void)
{
    OLED_Clear();
    // 在屏幕中央显示"START"
    OLED_SetPosition(44, 2);
    OLED_ShowChar(44, 2, CHAR_S);
    OLED_ShowChar(52, 2, CHAR_T);
    OLED_ShowChar(60, 2, CHAR_A);
    OLED_ShowChar(68, 2, CHAR_R);
    OLED_ShowChar(76, 2, CHAR_T);
}

// 显示结束页面
static void DisplayEndPage(void)
{
    OLED_Clear();
    // 在屏幕中央显示"END"
    OLED_SetPosition(52, 2);
    OLED_ShowChar(52, 2, CHAR_E);
    OLED_ShowChar(60, 2, CHAR_N);
    OLED_ShowChar(68, 2, CHAR_D);
}

// 初始化页面管理器
void PageManager_Init(void)
{
    currentPage = PAGE_LOADING;
    progressBar.progress = 0;
    OLED_Clear();
    OLED_DisplayLoading();
    DisplayProgressBar();
}

// 切换页面
void PageManager_SwitchPage(PageType page)
{
    currentPage = page;
    switch (page)
    {
    case PAGE_LOADING:
        OLED_Clear();
        OLED_DisplayLoading();
        DisplayProgressBar();
        break;
    case PAGE_START:
        DisplayStartPage();
        break;
    case PAGE_END:
        DisplayEndPage();
        break;
    }
}

// 更新进度条
void PageManager_UpdateProgress(uint8_t progress)
{
    if (currentPage != PAGE_LOADING)
        return;

    if (progress > 100)
        progress = 100;

    progressBar.progress = progress;
    DisplayProgressBar();
}

// 获取当前页面
PageType PageManager_GetCurrentPage(void)
{
    return currentPage;
}